package com.newlink.building.login.ui

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.text.style.ClickableSpan
import android.view.View
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import com.newlink.building.login.R
import com.newlink.building.common_base.activities.NL_WebViewActivityNL
import com.newlink.building.common_base.constant.Base_Constant
import com.newlink.building.common_base.utils.NLog
import com.newlink.building.common_base.utils.LocaleUtils

/**
 * @Author: Jake
 * @Date: 2024-08-14
 * @Description: 一个自定义的ClickableSpan，用于处理点击事件并跳转到隐私政策网页。
 * 该Span能够根据系统语言自动选择中文或英文隐私政策链接，
 * 并尝试通过LifecycleObserver管理Context生命周期以避免内存泄漏。
 */
class Module_Login_CustomClickableSpan(private var activityContext: Activity?) : ClickableSpan(),
    DefaultLifecycleObserver {

    /**
     * 当Span被点击时调用。
     * @param widget 被点击的TextView。
     */
    override fun onClick(widget: View) {
        jumpToLicense()
    }

    /**
     * LifecycleObserver的回调方法，在LifecycleOwner销毁时调用。
     * 用于将持有的Activity Context置空，防止内存泄漏。
     * @param owner 对应的LifecycleOwner（通常是Activity或Fragment）。
     */
    override fun onDestroy(owner: LifecycleOwner) {
        super.onDestroy(owner)
        // 在销毁时将context置为null，避免内存泄漏
        NLog.e("[CustomClickableSpan] ::: onDestroy - Context cleared")
        activityContext = null
    }

    /**
     * 跳转到隐私政策网页。
     * 根据当前系统语言选择对应的隐私政策URL和标题，并通过FvlWebViewActivity打开。
     */
    private fun jumpToLicense() {
        if (activityContext == null) {
            NLog.e("[CustomClickableSpan] -> Context is null, cannot jump to License View.")
            return
        }

        NLog.e("[CustomClickableSpan] -> Attempting to jump to License View")

        // 根据系统语言选择隐私政策URL
        val url =
            if (LocaleUtils.isSystemLocaleZh()) Base_Constant.PRIVACY_POLICY_URL else Base_Constant.PRIVACY_POLICY_URL_EN
        // 获取隐私政策页面的标题
        val title = activityContext?.getString(R.string.user_register_license_content)

        val intent = Intent(activityContext, NL_WebViewActivityNL::class.java).apply {
            // 添加 NEW_TASK 标志，如果当前Activity栈中没有FvlWebViewActivity实例，则会创建一个新的任务。
            // 谨慎使用NEW_TASK，因为它可能改变应用的返回栈行为。
            // 如果WebViewActivity是App内部的标准Activity，通常不需要此标志，除非有特定需求。
            flags = Intent.FLAG_ACTIVITY_NEW_TASK
            putExtra("link", url)
            putExtra("title", title)
        }

        // 启动WebView Activity
        activityContext?.startActivity(intent)
    }

    /**
     * 用于获取当前ClickableSpan关联的Activity Context。
     * @return Activity Context，可能为null。
     */
    fun getAssociatedContext(): Context? {
        return activityContext
    }
}